package com.example.s06datajpamanytomany.model;


import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashSet;
import java.util.Set;

//假设有一个音乐网站，有一个 songs 表存储所有歌曲的信息，有一个 artists 表存储所有艺术家的信息。
// 每个歌曲可以由多个艺术家合作演唱，同时每个艺术家也可以有多个合作的歌曲。
// 由此，可以创建一个 song_artists 关联表来存储每首歌曲和每个合作演唱艺术家之间的关系。
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "artists",
//        用来指定唯一性约束
        uniqueConstraints = @UniqueConstraint(
        name = "unique_email",
        columnNames = "email")
)
public class Artist {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String name;
    private String genre;
    private String email;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "artist_songs",
            joinColumns = @JoinColumn(
                    name = "artist_id", referencedColumnName = "id"
            ),
            inverseJoinColumns = @JoinColumn(
                    name = "songs_id", referencedColumnName = "id"
            )
    )
    private Set<Song> songs = new HashSet<>();
}
